package MAIN;

import java.util.Scanner;

//笔试强训第33天
/*选择题*/
/*一个用户进程通过read系统调用读取一个磁盘文件中的数据，若文件的数据不再内存中，则进程进入睡眠模式的目的是等待内存对
* 磁盘上文件的映射，因为磁盘的读取比较慢，所以此时用户进入睡眠模式，read是系统调用，所以是CPU从用户态到内核态
* open系统调用才包含文件的名称，read只是包含输入流*/
/*Linux文件权限，第一位：表示文件类型   权限的前三位：文件所有者的权限   权限的中间三位：文件所属用户组的权限
* 权限的后三位：其他用户的权限*/
/*读写锁的特性：写锁加锁时，其他线程不能再进行读操作（此时申请读锁就会失败，会进入阻塞状态），也就是开始有一个线程
加锁成功，此时其他线程再申请写锁会进入阻塞，不会加锁成功
* 写操作（申请加写锁），也就是写写互斥，读写互斥。 读锁加锁时，其他线程还能进行读操作，也就是读读并发*/
/*进程阻塞的原因不包括：时间片切换，如果是时间片没有用完此时就是进程的执行状态，如果时间片用完了此时进程就是就绪状态
* 进程的阻塞的原因包括：等待IO，进程sleep，等待解锁（如果没有通知我来解锁，此时这个进程还是阻塞状态）*/
/*缺页：是引入了虚拟内训后的一个概念。操作系统启动后，再内存中维护着一个虚拟地址表，进程需要的虚拟地址再虚拟地址表中
*      记录。一个程序被加载运行时，只是加载了很少的一部分内存，另外一部分再需要时再从磁盘载入。  加载到内存的部分
*      标识为“驻留”，未加载带内存的部分标为“未注留”。操作系统根据需要读取需您地址表，如果读到虚拟地址表中的地址被
*       标识为“未驻留”，表示这部分地址记录的和程序代代码未被加载到内存，需要从磁盘中导入，则这种情况就表示“缺页”。*/
/*页框：CPU中添加了能自动把虚拟内存（逻辑地址）地址转化为物理地址内存地址的电路，为了简化这种电路，就把RAM划分为长度为
* 4kb或者8kb的块，这种块就叫做页框。
*     内核以页框为基本单位管理物理内存，分页单元中，页指一组数据，而存放这组数据的物理地址就是页框，当 这组数据被释放后，
* 若有其他的数据请求访问这个内存，此时页框中的页将会改变。*/
/*高响应比优先算法：响应比 = (等待时间+要求服务的时间)/要求服务时间，这个算法综合考虑了作业，进程的等待时间和要求服务的时间
* 在每次调度时先计算各个作业，进程的响应比，选择响应比最高的作业，进程为其服务。   高响应比优先调度算法时介于先来先服务算法
* 和短作业优先算法之间的折中算法，即考虑作业等待时间又考虑作业运行时间，既照顾短作业又不使长作业等待时间过长，改进了调度性能*/
/*时间片轮转调度：用于分时系统中的进程调度，每次调度时，总是选择就绪队列的队首进程，让其在CPU上运行的一个系统预先设置好的时间片
* 一个时间片内没有完成运行的进程，返回到就绪队列末尾重新排队，等待下一次调度*/
/*短作业优先算法（SJF）：是非抢占式的算法，最短的作业，进程先得到服务（最短是指要求服务的时间最短），系统一旦把处理机分配给
* 就绪队列中优先权最高的进程之后，该进程便一直执行下去，直至完成，此时就容易造成节现象。*/
/*活跃度问题：是指线程或进程长时间得不到cpu占用。 可能导致活跃度失败的情况：
* 1.死锁：线程之间互相持有锁，并等待对方释放资源，结果谁页得不到执行。
* 2.饥饿：如每次都性质优先级高的线程，此时优先级低的线程可能永远执行不到
* 3.活锁：指的是任务或者执行者没有被阻塞，由于某些条件没有满足，导致一直重复尝试，失败，尝试，失败。*/
/*一个进程中的所有线程是共享相同的地址空间的，但是父进程中的子进程是不共享地址空间的，每个进程中都有一份自己单独的地址空间
* 主线程和子线程是并行的关系，并没有依赖关系，改变父进程的状态是否会影响到子线程完全看你的代码咋写，如果你的父进程退出了，此时
* 你的代码中程序让子进程页跟着一起退出，此时就是会影响到紫禁城的状态的*/

public class Main33 {
    //剪花布条
    public static void main1(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            String s1 = scan.nextLine();
            String s2 = scan.nextLine();
            int len1 = s1.length();
            int len2 = s1.length();
            int count = 0;
            while (s1.contains(s2)) {
                s1 = s1.replaceFirst(s2, "");
                count++;
            }
            System.out.println(count);
        }
    }
    //客似云来：前多少项斐波那契数的总和
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNextInt()) {
            int from = scan.nextInt();
            int to = scan.nextInt();
            long[] fib = new long[80];
            fib[0] = 1;
            fib[1] = 1;
            for (int i = 2; i < fib.length; i++) {
                fib[i] = fib[i-1] + fib[i-2];
            }
            int i = from - 1;
            int j = to - 1;
            System.out.println(sum(fib, i, j));
        }
    }
    //求数组中某一段下标对应的值的和
    private static long sum (long[] arr, int i, int j) {
        long sum = 0;
        for (int k = i; k <= j; k++) {
            sum += arr[k];
        }
        return sum;
    }
}
